package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

// 全局使用bufio进行缓冲
func readFile(filePath string) {
	file, err := os.Open(filePath)
	if err != nil {
		fmt.Println("打开文件错误", err)
		panic(err)
	}
	// 延迟关闭文件流
	defer func(file *os.File) {
		err := file.Close()
		if err != nil {
			fmt.Println("关闭文件错误", err)
			panic(err)
		}
	}(file)

	// IO缓存流
	nr := bufio.NewReader(file)
	for {
		line, err := nr.ReadString('\n')
		if err == io.EOF {
			break
		}
		fmt.Println("当前行数据：", line)
	}
}

func writeFile(filePath string) {
	file, openErr := os.OpenFile(filePath, os.O_CREATE|os.O_APPEND, 777)
	if openErr != nil {
		fmt.Println("打开文件错误", openErr)
		panic(openErr)
	}
	// IO缓存流
	nw := bufio.NewWriter(file)
	for i := 0; i < 5; i++ {
		_, err := nw.WriteString("hahaha\n")
		if err != nil {
			return
		}
	}
	flushErr := nw.Flush()
	if flushErr != nil {
		return
	}
}

func main() {
	writeFile("G:\\go_projects\\demo_file\\test.txt")
	readFile("G:\\go_projects\\demo_file\\test.txt")
}
